package fuse.LaCollaFS.Metadades;



import fuse.FuseDirEnt;
import fuse.FuseStat;
import fuse.LaCollaFS.testPaxos;
import junit.framework.TestCase;

public class testDirectori extends TestCase {
	//Directori dir;
	MetaDades dades = null;

	public testDirectori() {
		Directori dir;
		dir = new Directori("/");

	}

	public void testEsDirectori() {
		Directori dir;
		dir = new Directori("/");

		assertTrue(dir.esDirectori());

	}

	public void testEsFitxer() {
		Directori dir;
		dir = new Directori("/");

		assertTrue(!dir.esFitxer());
	}

	public void testConstructor() {
		Directori dir;
		dir = new Directori("/");

		assertEquals(dir.getNom(), "/");
	
	}

	public void testBuit() {
		Directori dir;
		dir = new Directori("/");
//System.out.println(dir.Buit());
		assertTrue(dir.Buit());

	}

	public void testAfegirFill() {
		Directori dir;
		dir = new Directori("/");

		Directori fill;
		fill = new Directori("pepito");

		dir.AfegirFill(fill);
		assertTrue(!dir.Buit());

	}


	public void testLlistarFills(){
		Directori dir;
		dir = new Directori("/");

		Directori fill;
		Fitxer fill2 = new Fitxer("hola.txt");
		
		FuseDirEnt llistat[];
		llistat = dir.Llistarfills();
//		System.out.println("llistat lenght " +llistat.length );
		assertEquals(llistat.length,2);
		fill = new Directori("pepito");

		dir.AfegirFill(fill);
		dir.AfegirFill(fill2);
		llistat = dir.Llistarfills();
	//	System.out.println("llistat:" + llistat.length);
		assertEquals(llistat.length,4);
		FuseDirEnt dirEntry = new FuseDirEnt();
		dirEntry = new FuseDirEnt();
		dirEntry = llistat[2];
	//	System.out.println(dirEntry.name);
		assertEquals(dirEntry.name,"pepito");
		FuseStat stat;
		stat = fill.getStat();
		assertEquals(dirEntry.mode,stat.mode);
		
	}

	public void testBuscarFill(){
		Directori dir;
		dir = new Directori("/");

		assertEquals(dir.BuscarFill("/pepito"),null);
		assertEquals(dir.BuscarFill("./"),dir);
		
		Directori f = new Directori("joanet");
		Directori f3 = new Directori("hola");
		Directori f2 = new Directori("laila");
		Directori f4 = new Directori("bernat");
		f.AfegirFill(f2);
		dir.AfegirFill(f);
		dir.AfegirFill(f4);
		assertEquals(((Directori) dir.BuscarFill("joanet")).BuscarFill("../bernat"),f4);
		assertEquals(dir.BuscarFill("joanet"),f);
		assertEquals(dir.BuscarFill("joanet/pepito"),null);
		assertEquals(f.BuscarFill(f.getNom()),f);
		
		Fitxer fit;
		fit = new Fitxer("hola.txt");
	//	System.out.println(f.getNom()+"/"+fit.getNom());
		f3.AfegirFill(fit);
		assertEquals(f3.BuscarFill("/hola/hola.txt@1"),fit);
		assertEquals(f3.BuscarFill("/hola/hola.txt"),fit);
		assertEquals(f3.BuscarFill("/dfdf/w"),null);
		//	System.out.println("hol!!!");
	
		//System.out.println("hola "+dir.BuscarFill("joanet/laila").getNom());
		
		assertEquals(dir.BuscarFill("joanet/laila"),f2);
		assertEquals(dir.BuscarFill("joanet/laila2"),null);
		assertEquals(dir.BuscarFill("joanet/laila/gola"),null);
	}
		
	
	
	public void testEliminarFill(){
		Directori dir;
		dir = new Directori("/");

		Directori fill,fill2;
		FuseDirEnt llistat[];
		llistat = dir.Llistarfills();
		fill = new Directori("pepito");
		fill2 = new Directori("pep");
		fill.AfegirFill(fill2);
		dir.AfegirFill(fill);
		llistat = dir.Llistarfills();
		assertEquals(llistat.length,3);
		dir.EliminarFill("pepito");
		assertTrue(!dir.Buit());
		
		fill.EliminarFill("pep");
		assertTrue(fill.Buit());
		
		
		Directori d = new Directori("dfdfsdf");
		Fitxer fit = new Fitxer("hola.txt");
		d.AfegirFill(fit);
		assertTrue(!d.Buit());
		d.EliminarFill("hola.txt");
		assertTrue(d.Buit());
		
		
		
	}
	public void testEliminarFillRecursiu(){
		Directori dir;
		dir = new Directori("/");
		Directori dir2 = new Directori("hola");
		Directori dir3 = new Directori("fotos");
		dir2.AfegirFill(dir3);
		dir.AfegirFill(dir2);
		dir.EliminarFillRecursiu("/hola");
		assertTrue(dir.Buit());
		
	}
	public void testXML(){
		Directori dir;
		dir = new Directori("/");
		Directori dir2 = new Directori("hola");
		Directori dir3 = new Directori("fotos");
		
		Fitxer fit1= new Fitxer("hola.txt");
		Fitxer fit1antic= new Fitxer("hola.txt");
		fit1.AfegirAnterior(fit1antic);
		Fitxer fit2= new Fitxer("adeu.txt");
		Enllas en = new Enllas("p");
		dir2.AfegirFill(fit1);
		dir2.AfegirFill(fit2);
		dir.AfegirFill(dir2);
		dir3.AfegirFill(en);
		dir.AfegirFill(dir3);
		
		System.out.println(dir.CrearXML());
		
		Directori test = new Directori("werwer");
	//dir.CrearXML();
	//System.out.println("arribo aqui!!!");
		test.LlegirXML(dir.CrearXML());
		assertTrue(test.getFill("hola").esDirectori());
		assertTrue(((Directori) test.getFill("hola")).getFill("hola.txt").esFitxer());
		assertTrue(test.getFill("fotos").esDirectori());
		
		
		
		
	}
	

	
	
}
